#include<DynamicArray.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


typedef struct 
{
    int id;
    char *name;
}Stu;


Stu* InitStu(int id, const char *name)
{
    Stu *s = (Stu *)malloc(sizeof(Stu));
    if(s == NULL)
    {
        printf("InitStu malloc error !\n");
        return NULL;
    }
    s->id = id;
    //s->name = malloc(strlen(name)+1)  strcpy(s->name,name)
    s->name = strdup(name); //在堆上拷贝出一个字符串,需要手动释放
    return s;
}

void FreeStu(void *ptr)
{
    Stu*s = (Stu*)ptr;
    free(s->name);
    free(s);
}

void PrintStu(void*str)
{
    Stu*s = (Stu*)str;

    printf("%d %s\n",s->id,s->name); 
}


void PrintDouble(void *ptr)
{
    DArray*a = (DArray*)ptr;
    PrintDArray(a,PrintStu);
}

void FreeDouble(void* ptr)
{
    DArray*a = (DArray*)ptr;
    FreeDArray(a,FreeStu);
}




bool ByID(void*p1,void*p2)
{
    Stu*s1 = (Stu*)p1;
    Stu*s2 = (Stu*)p2;
    return s1->id < s2->id;     
}



int main()
{
    // DArray *d = InitDArray(3);

    DArray *a = InitDArray(10);


    InsertTail(a,InitStu(1,"张三"));
    InsertTail(a,InitStu(3,"李四"));

    // DArray *b = InitDArray(10); 
    InsertTail(a,InitStu(2,"王五"));

    // InsertTail(d,a);
    // InsertTail(d,b);
    // for(int i=0;i<20;i++)
    // {
    //     InsertTail(a,i+1);
    // }
    // RemoveByElement(a,10);


    Sort(a,ByID);


    PrintDArray(a,PrintStu);




    // int *p = FindByElement(a,100);

    // if(p)       //实质上  NULL空指针就是 0  
    //             //所以此处也可以写成 if(p != NULL), 意思是一样的，只是做了简化
    // {
    //     printf("%d\n",*p);
    // }
    // else
    // {
    //     printf("没找到");
    // }
    FreeDArray(a,FreeStu);


    return 0;
}